unit uThread_AtualizaFicha;

interface

uses
  Classes, DB, Dbtables;

type
  Thread_AtualizaFicha = class(TThread)
  private
    { Private declarations }
    Produto: string;
  protected
    procedure Execute; override;
    procedure AtualizaProduto(pPro_Codigo: string);
  public
    constructor Criar(pProduto: string);
  end;

implementation

uses Dm, Variants, SysUtils;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure Thread_AtualizaFicha.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ Thread_AtualizaFicha }

procedure Thread_AtualizaFicha.AtualizaProduto(pPro_Codigo: string);
var
  tq1: TQuery;
begin
  tq1 := Tquery.Create(dmint);
  tq1.databasename := dmint.db.databasename;
  tq1.active := False;
  tq1.sql.Clear;
  tq1.params.clear;
  tq1.sql.add('Update produto set Pro_Saldo = (Select sum(fp_Quantidade) from FichaProduto where Pro_Codigo =:Prod) ' +
    'where Pro_Codigo =:Prod');
  tq1.ParamByName('Prod').AsString := pPro_Codigo;
  try
    tq1.ExecSQL;
  except
  end;
  FreeAndNil(tq1);
end;

constructor Thread_AtualizaFicha.Criar(pProduto: string);
begin
  Create(False);
  Produto := pProduto;
  FreeOnTerminate := True;
end;

procedure Thread_AtualizaFicha.Execute;
var
  tq: TQuery;
begin
  { Place thread code here }
  tq := Tquery.Create(dmint);
  tq.databasename := dmint.db.databasename;
  tq.active := False;
  tq.sql.Clear;
  tq.params.clear;
  tq.sql.add('Select Pro_Codigo from Produto ');
  if (Trim(Produto) <> '') and (Produto <> Null) then begin
    tq.SQL.Add('where Pro_Codigo = :Prod');
    tq.ParamByName('Prod').AsString := Produto;
  end;
  tq.sql.add('order by Pro_Codigo ');
  tq.Open;
  while not tq.Eof do begin
    (AtualizaProduto(tq.FieldByName('Pro_Codigo').AsString));
    tq.Next;
  end;
  FreeAndNil(tq);
end;

end.

 